package com.example.timer;

import com.example.pojo.tMesProQualityIndexPojo;
import com.example.pojo.tMesProQualityPojo;
import com.example.service.tMesProQualityIndexService;
import com.example.service.tMesProQualityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.List;

@Component
public class guoDataChangeTimer {
    //数据库分表测试，对大数据的表进行分表，以及如何查询分表的内容
    @Autowired
    private tMesProQualityService mesProQualityService;
    @Autowired
    private tMesProQualityIndexService mesProQualityIndexService;
    //早班定时执行
    @Scheduled(cron = "0 0 8 ? * 0")
    public void databaseSplitTable(){
        //在数据表中总共有多少条数据
        Integer tableLength = mesProQualityService.queryAllCount();
        System.out.println(tableLength);
        //查询到的数据大于200万条时，进行分表
        if (tableLength >= 2000000 ){
            //对数据库进行分表
            int part = 10000;
            int partAll = 1000000; //每个数据分表中放入的数据量 -1000000




            //在记录的表中查询到所有的表的表名称
            List<tMesProQualityIndexPojo> tableNameList = mesProQualityIndexService.queryTableName();
            //得到应该建立的最新的表的表名
            String tableName="T_MES_PRO_QUALITY_" + Integer.toString(tableNameList.size());


            //新建一个表，用于数据库分表
            mesProQualityService.newTable(tableName);
            //将数据写入新建的表中，每10000条写一次
            for (int i = 0; i < partAll/part; i++) {
                //查询part设定的数据，返回查询的结果，待使用
                List<tMesProQualityPojo> pojoList = mesProQualityService.queryPart(part);

                // 判断pojoList是否为空，如果为空，跳过本次循环
                if (pojoList == null || pojoList.isEmpty()) {
                    continue; // 跳过当前循环
                }

                //将查询到的数据放入新建的分表中
                mesProQualityService.insertCurrentData(pojoList,tableName);

                //查询到的数据放入分表中后，将这些数据从旧的表中删除

                mesProQualityService.deleteCurrentData(pojoList);


            }


            //新建新表完成后，插入数据记录到索引的表中，用于后期更新和判断
            tMesProQualityIndexPojo indexPojoValue = new tMesProQualityIndexPojo(); //读取pojo数据
            indexPojoValue.setTable_name(tableName);  //整合数据
            indexPojoValue.setCreation_time(LocalDateTime.now());
            indexPojoValue.setTable_length(partAll);

            mesProQualityIndexService.insertTableName(indexPojoValue); //执行插入数据的指令


            System.out.println(tableName);

        }

    }
}
